package llm

// LLM_PROVIDER 表示LLM提供商的元数据
type LLM_PROVIDER struct {
	ID       string `json:"id"`
	Name     string `json:"name"`
	Enable   bool   `json:"enable"`
	Endpoint string `json:"endpoint,omitempty"`
}

// ModelMeta 表示模型的元数据
type ModelMeta struct {
	ID      string `json:"id"`
	Object  string `json:"object"`
	OwnedBy string `json:"owned_by"`
}

// LLMResponse 表示LLM的响应
type LLMResponse struct {
	Content           string                 `json:"content"`
	ReasoningContent  string                 `json:"reasoning_content,omitempty"`
	TotalUsage        map[string]int         `json:"totalUsage,omitempty"`
	FunctionCall      interface{}            `json:"function_call,omitempty"`
	FunctionCallToken int                    `json:"function_call_token,omitempty"`
	FinishReason      string                 `json:"finish_reason,omitempty"`
	AdditionalInfo    map[string]interface{} `json:"additional_info,omitempty"`
}

// ChatMessage 表示聊天消息
type ChatMessage struct {
	Role    string `json:"role"`
	Content string `json:"content"`
	Name    string `json:"name,omitempty"`
}

// ToolCall 表示工具调用
type ToolCall struct {
	ID       string `json:"id"`
	Type     string `json:"type"`
	Function struct {
		Name      string      `json:"name"`
		Arguments interface{} `json:"arguments"`
	} `json:"function"`
}

// MCPToolDefinition 表示工具的定义
type MCPToolDefinition struct {
	Name        string `json:"name"`
	Description string `json:"description"`
	Function    struct {
		Name        string `json:"name"`
		Description string `json:"description"`
		Parameters  struct {
			Properties map[string]struct {
				Type        string `json:"type"`
				Description string `json:"description,omitempty"`
				Enum        []any  `json:"enum,omitempty"`
			} `json:"properties"`
			Required []string `json:"required,omitempty"`
		} `json:"parameters"`
	} `json:"function"`
}

// LLMCoreStreamEvent 表示LLM流事件
type LLMCoreStreamEvent struct {
	Type    string      `json:"type"`
	Content string      `json:"content,omitempty"`
	Delta   string      `json:"delta,omitempty"`
	Token   int         `json:"token,omitempty"`
	Usage   interface{} `json:"usage,omitempty"`
	Finish  bool        `json:"finish,omitempty"`
	Error   string      `json:"error,omitempty"`
}

// ModelConfig 表示模型配置
type ModelConfig struct {
	// 模型配置字段
}

// LLMProvider 定义接口
type LLMProvider interface {
	// Init 初始化提供商
	Init() error
	// FetchModels 获取提供商的模型列表
	FetchModels() ([]ModelMeta, error)
	// GetModels 获取所有模型（包括自定义模型）
	GetModels() []ModelMeta
	// AddCustomModel 添加自定义模型
	AddCustomModel(model ModelMeta) ModelMeta
	// RemoveCustomModel 删除自定义模型
	RemoveCustomModel(modelId string) bool
	// UpdateCustomModel 更新自定义模型
	UpdateCustomModel(modelId string, updates ModelMeta) bool
	// GetCustomModels 获取所有自定义模型
	GetCustomModels() []ModelMeta
	// ParseFunctionCalls 解析函数调用标签
	ParseFunctionCalls(response string) []ToolCall
	// Check 验证提供商API是否可用
	Check() (bool, string)
	// SummaryTitles 生成对话标题
	SummaryTitles(messages []ChatMessage, modelId string) (string, error)
	// Completions 同步获取完整的LLM响应
	Completions(messages []ChatMessage, modelId string, temperature *float64, maxTokens *int) (LLMResponse, error)
	// Summaries 总结文本内容
	Summaries(text string, modelId string, temperature *float64, maxTokens *int) (LLMResponse, error)
	// GenerateText 根据提示生成文本
	GenerateText(prompt string, modelId string, temperature *float64, maxTokens *int) (LLMResponse, error)
	// CoreStream 核心流式处理方法
	CoreStream(messages []ChatMessage, modelId string, modelConfig ModelConfig, temperature float64, maxTokens int, tools []MCPToolDefinition) <-chan LLMCoreStreamEvent
}
